home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / x / volume8 / xmail / patch2.04 < prev    next >
Encoding:
Internet Message Format  |  1990-08-31  |  54.9 KB

  1. Path: uunet!aplcen!uakari.primate.wisc.edu!zaphod.mps.ohio-state.edu!wuarchive!cs.utexas.edu!sun-barr!newstop!sun!parns.nsc.com
  2. From: michael@parns.nsc.com (Michael Wagnitz)
  3. Newsgroups: comp.sources.x
  4. Subject: REPOST: v08i099: xmail, Patch2, Part04/05
  5. Message-ID: <141678@sun.Eng.Sun.COM>
  6. Date: 31 Aug 90 16:44:15 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 1448
  9. Approved: argv@sun.com
  10.  
  11. Submitted-by: michael@parns.nsc.com (Michael Wagnitz)
  12. Posting-number: Volume 8, Issue 99
  13. Archive-name: xmail/patch2.04
  14.  
  15. Let's try this again...
  16.  
  17. #! /bin/sh
  18. # This is a shell archive.  Remove anything before this line, then unpack
  19. # it by saving it into a file and typing "sh file".  To overwrite existing
  20. # files, type "sh file -c".  You can also feed this as standard input via
  21. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  22. # will see the following message at the end:
  23. #        "End of archive 4 (of 5)."
  24. # Contents:  Patch.02d
  25. # Wrapped by michael@harley on Mon Aug 27 12:47:27 1990
  26. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  27. if test -f 'Patch.02d' -a "${1}" != "-c" ; then 
  28.   echo shar: Will not clobber existing file \"'Patch.02d'\"
  29. else
  30. echo shar: Extracting \"'Patch.02d'\" \(52848 characters\)
  31. sed "s/^X//" >'Patch.02d' <<'END_OF_FILE'
  32. X!                                             markIndex(" ");
  33. X                                             }
  34. X                                          }
  35. X                                break;
  36. X--- 246,252 ----
  37. X                                              sprintf(tmp, "%d", msgnum);
  38. X                                              XtFree(msg);
  39. X                                              msg = QueryMail(tmp);
  40. X!                                             markIndex("> ");
  41. X                                             }
  42. X                                          }
  43. X                                break;
  44. X***************
  45. X*** 256,268 ****
  46. X                            markIndex("D");
  47. X                    num = msgnum;
  48. X                    msgnum = index_handler(++msgnum, 0); /* next msg */
  49. X!                           if (msgnum != num) markIndex(" ");
  50. X                           }
  51. X                         if (*Command == 'u') {
  52. X                    c = QueryMail("=");
  53. X                    sscanf(c, "%d", &msgnum);
  54. X                    XtFree(c);
  55. X!                           iw = WidgetOf(WidgetOf(toplevel, "topBox"),"indexWindow");
  56. X                            if (TextGetLastPos(iw) < (XtTextPosition) 4) {
  57. X                               c = QueryMail("h");
  58. X                               writeText(iw, c, FALSE);
  59. X--- 269,282 ----
  60. X                            markIndex("D");
  61. X                    num = msgnum;
  62. X                    msgnum = index_handler(++msgnum, 0); /* next msg */
  63. X!                           if (msgnum != num)
  64. X!                              markIndex("> ");
  65. X                           }
  66. X                         if (*Command == 'u') {
  67. X                    c = QueryMail("=");
  68. X                    sscanf(c, "%d", &msgnum);
  69. X                    XtFree(c);
  70. X!                           iw = WidgetOf(WidgetOf(toplevel, "topBox"), "indexWindow");
  71. X                            if (TextGetLastPos(iw) < (XtTextPosition) 4) {
  72. X                               c = QueryMail("h");
  73. X                               writeText(iw, c, FALSE);
  74. X***************
  75. X*** 269,275 ****
  76. X                       XtFree(c);
  77. X                              }
  78. X                    msgnum = index_handler(msgnum, 1);
  79. X!                           markIndex(" ");
  80. X                           }
  81. X                         c = QueryMail("file");    /* resets current msg to 1 */
  82. X                         (void) UpdateTitleBar(c);
  83. X--- 283,289 ----
  84. X                       XtFree(c);
  85. X                              }
  86. X                    msgnum = index_handler(msgnum, 1);
  87. X!                           markIndex("> ");
  88. X                           }
  89. X                         c = QueryMail("file");    /* resets current msg to 1 */
  90. X                         (void) UpdateTitleBar(c);
  91. X***************
  92. X*** 281,295 ****
  93. X  /*
  94. X  ** In response to a request to view new mail, first reset the mailbox flag.
  95. X  ** If mail came back with an error, complain to the user.  Otherwise, clear
  96. X! ** the Newmail command button highlighting, and (if it exists) destroy the
  97. X! ** current folder popup list.  Then display any new mail text.
  98. X  */
  99. X      case C_NEWMAIL:
  100. X              button = WidgetOf(WidgetOf(WidgetOf(toplevel, "topBox"),
  101. X                                                       "commandPanel"), "Folder");
  102. X              UnsetNewmail(button, NULL, NULL);
  103. X-             if (popup = WidgetOf(button, "popupList"))
  104. X-                XtDestroyWidget(popup);
  105. X                      if (O_BELL == match(output_pattern, msg)) {
  106. X                         if (strncmp(msg, "No mail for ", 12) == 0) {
  107. X                            Bell("No mail in system mailbox\n");
  108. X--- 295,306 ----
  109. X  /*
  110. X  ** In response to a request to view new mail, first reset the mailbox flag.
  111. X  ** If mail came back with an error, complain to the user.  Otherwise, clear
  112. X! ** the Newmail command button highlighting. Then display any new mail text.
  113. X  */
  114. X      case C_NEWMAIL:
  115. X              button = WidgetOf(WidgetOf(WidgetOf(toplevel, "topBox"),
  116. X                                                       "commandPanel"), "Folder");
  117. X              UnsetNewmail(button, NULL, NULL);
  118. X                      if (O_BELL == match(output_pattern, msg)) {
  119. X                         if (strncmp(msg, "No mail for ", 12) == 0) {
  120. X                            Bell("No mail in system mailbox\n");
  121. X***************
  122. X*** 316,322 ****
  123. X                               sprintf(tmp, "%d", msgnum);
  124. X                               XtFree(msg);
  125. X                               msg = QueryMail(tmp);
  126. X!                              markIndex(" ");    /* 'cause we just read it */
  127. X                              }
  128. X                           }
  129. X                        }
  130. X--- 327,333 ----
  131. X                               sprintf(tmp, "%d", msgnum);
  132. X                               XtFree(msg);
  133. X                               msg = QueryMail(tmp);
  134. X!                              markIndex("> ");    /* 'cause we just read it */
  135. X                              }
  136. X                           }
  137. X                        }
  138. X***************
  139. X*** 419,424 ****
  140. X--- 430,446 ----
  141. X          if (strcmp(&output[j], MailPrompt) == 0) {
  142. X             output[j] = '\0';        /* Drop prompt from end of text */
  143. X             break;            /* and return from read routine */
  144. X+           }
  145. X+ 
  146. X+         if (!strcmp(Command,"Start")) {    /* see if somehow missed the prompt */
  147. X+            j = strlen(output) - 3;    /* no accidents allowed here either */
  148. X+            if (j < 0) j = 0;        /* no string references before zero */
  149. X+            if (strcmp(&output[j], "\n& ") == 0) { /* if default mail prompt */
  150. X+               output[++j] = '\0';    /* drop prompt from end of string */
  151. X+               XtFree(MailPrompt);    /* intended prompt is now bogus */
  152. X+               MailPrompt = XtNewString("& ");    /* reset the mail prompt */
  153. X+               break;            /* and return from read routine */
  154. X+              }
  155. X            }
  156. X  
  157. X          if (O_BELL == match(output_pattern,output) && !strcmp(Command,"Start"))
  158. X*** ../v1.1/utils.c    Mon Jun  4 09:48:42 1990
  159. X--- utils.c    Mon Aug 27 11:09:22 1990
  160. X***************
  161. X*** 32,38 ****
  162. X   * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL,
  163. X   * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  164. X   * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  165. X!  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  166. X   * PERFORMANCE OF THIS SOFTWARE.
  167. X   *
  168. X   * The following software modules were created and are Copyrighted by National
  169. X--- 32,38 ----
  170. X   * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL,
  171. X   * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  172. X   * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  173. X!  * OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  174. X   * PERFORMANCE OF THIS SOFTWARE.
  175. X   *
  176. X   * The following software modules were created and are Copyrighted by National
  177. X***************
  178. X*** 72,95 ****
  179. X  char    *s;
  180. X  {
  181. X   XtTextBlock     textblock;
  182. X!  XtTextPosition    pos;
  183. X   Widget        w = WidgetOf(WidgetOf(toplevel, "topBox"), "indexWindow");
  184. X  
  185. X  
  186. X!  pos = XtTextGetInsertionPoint(w) + 1;
  187. X  
  188. X!  XtTextSetInsertionPoint(w, pos);
  189. X  
  190. X   textblock.firstPos = 0;
  191. X!  textblock.length   = 1;
  192. X   textblock.ptr      = s;
  193. X   textblock.format   = FMT8BIT;
  194. X  
  195. X!  XtTextReplace(w, pos, pos + 1, &textblock);
  196. X  
  197. X   XtTextSetInsertionPoint(w, pos);
  198. X- 
  199. X-  SetSelect(w, NULL, NULL, NULL);
  200. X  } /* markIndex */
  201. X  
  202. X  
  203. X--- 72,110 ----
  204. X  char    *s;
  205. X  {
  206. X   XtTextBlock     textblock;
  207. X!  XtTextPosition    pos, old;
  208. X   Widget        w = WidgetOf(WidgetOf(toplevel, "topBox"), "indexWindow");
  209. X+  char        *p;
  210. X+  int        size = strlen(s);
  211. X  
  212. X  
  213. X!  pos = XtTextGetInsertionPoint(w);
  214. X  
  215. X!  if (*s == '>')            /* first, remove any existing pointer */
  216. X!     if (p = index(IndexBuf, '>')) {
  217. X!        old = p - IndexBuf;
  218. X!        XtTextSetInsertionPoint(w, old);
  219. X!        textblock.firstPos = 0;
  220. X!        textblock.length   = 1;
  221. X!        textblock.ptr      = " ";
  222. X!        textblock.format   = FMT8BIT;
  223. X!        XtTextReplace(w, old, old + 1, &textblock);
  224. X!       }
  225. X  
  226. X+  for (p = IndexBuf + pos; p > IndexBuf && *(p - 1) != '\n'; p--);
  227. X+ 
  228. X+  pos = (p - IndexBuf);
  229. X+ 
  230. X+  XtTextSetInsertionPoint(w, (*s == '>') ? pos : ++pos);
  231. X+ 
  232. X   textblock.firstPos = 0;
  233. X!  textblock.length   = size;
  234. X   textblock.ptr      = s;
  235. X   textblock.format   = FMT8BIT;
  236. X  
  237. X!  XtTextReplace(w, pos, pos + size, &textblock);
  238. X  
  239. X   XtTextSetInsertionPoint(w, pos);
  240. X  } /* markIndex */
  241. X  
  242. X  
  243. X***************
  244. X*** 186,192 ****
  245. X  String    msg;
  246. X  {
  247. X   Arg    args[1];
  248. X!  char    *p, *index();
  249. X   char    buf[BUFSIZ];
  250. X   int    worthy = 0;            /* only msgs with ending newline are */
  251. X  
  252. X--- 201,207 ----
  253. X  String    msg;
  254. X  {
  255. X   Arg    args[1];
  256. X!  char    *p;
  257. X   char    buf[BUFSIZ];
  258. X   int    worthy = 0;            /* only msgs with ending newline are */
  259. X  
  260. X*** ../v1.1/windows.c    Mon Jun  4 09:48:44 1990
  261. X--- windows.c    Mon Aug 27 11:09:22 1990
  262. X***************
  263. X*** 32,38 ****
  264. X   * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL,
  265. X   * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  266. X   * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  267. X!  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  268. X   * PERFORMANCE OF THIS SOFTWARE.
  269. X   *
  270. X   * The following software modules were created and are Copyrighted by National
  271. X--- 32,38 ----
  272. X   * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL,
  273. X   * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  274. X   * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  275. X!  * OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  276. X   * PERFORMANCE OF THIS SOFTWARE.
  277. X   *
  278. X   * The following software modules were created and are Copyrighted by National
  279. X***************
  280. X*** 50,56 ****
  281. X  
  282. X  
  283. X  #include "global.h"
  284. X! #include "Mailwatch.h"
  285. X  #include "patchlevel.h"
  286. X  #include "icon.mail"
  287. X  #include "national.bm"
  288. X--- 50,56 ----
  289. X  
  290. X  
  291. X  #include "global.h"
  292. X! #include "MailwatchP.h"
  293. X  #include "patchlevel.h"
  294. X  #include "icon.mail"
  295. X  #include "national.bm"
  296. X***************
  297. X*** 164,170 ****
  298. X      XtSetArg(args[3], XtNtranslations, XtParseTranslationTable(b_Trans));
  299. X      for (indx = 0; list[indx] != NULL; indx++) {
  300. X          strcpy(tag, list[indx]->label);        /* set window name by label */
  301. X!         if ((c = (char *)index(tag, ' '))) *c = '\0';    /* first word only */
  302. X          sprintf(trans, "%-*.*s", j, j, list[indx]->label);
  303. X          if (Labels[indx])            /* add accel. note if needed */
  304. X             strcat(trans, Labels[indx]);
  305. X--- 164,170 ----
  306. X      XtSetArg(args[3], XtNtranslations, XtParseTranslationTable(b_Trans));
  307. X      for (indx = 0; list[indx] != NULL; indx++) {
  308. X          strcpy(tag, list[indx]->label);        /* set window name by label */
  309. X!         if ((c = index(tag, ' '))) *c = '\0';    /* first word only */
  310. X          sprintf(trans, "%-*.*s", j, j, list[indx]->label);
  311. X          if (Labels[indx])            /* add accel. note if needed */
  312. X             strcat(trans, Labels[indx]);
  313. X***************
  314. X*** 284,292 ****
  315. X   b1.label = "Newmail"; b1.func = (XtCallbackProc) DoIt; b1.data = "file %";
  316. X  #ifdef SUNOS_4
  317. X   b2.label = "inc (no commit)"; b2.func = (XtCallbackProc) DoIt; b2.data = "inc";
  318. X!  list[0] = &b1; list[1] = &b2; list[2] = NULL;
  319. X  #else
  320. X!  list[0] = &b1; list[1] = NULL;
  321. X  #endif
  322. X   AddButton(parent, "Newmail", "DoCmd", "file %", list, NewMail_Help_Text);
  323. X  
  324. X--- 284,294 ----
  325. X   b1.label = "Newmail"; b1.func = (XtCallbackProc) DoIt; b1.data = "file %";
  326. X  #ifdef SUNOS_4
  327. X   b2.label = "inc (no commit)"; b2.func = (XtCallbackProc) DoIt; b2.data = "inc";
  328. X!  b3.label = "Drop Folders"; b3.func = (XtCallbackProc) DropIt; b3.data = "drop";
  329. X!  list[0] = &b1; list[1] = &b2; list[2] = &b3; list[3] = NULL;
  330. X  #else
  331. X!  b2.label = "Drop Folders"; b2.func = (XtCallbackProc) DropIt; b2.data = "drop";
  332. X!  list[0] = &b1; list[1] = &b2; list[2] = NULL;
  333. X  #endif
  334. X   AddButton(parent, "Newmail", "DoCmd", "file %", list, NewMail_Help_Text);
  335. X  
  336. X***************
  337. X*** 388,395 ****
  338. X    <Key>BackSpace:    DeleteChar()\n\
  339. X    <Key>Linefeed:    DoNothing()\n\
  340. X    <Key>Return:        DoNothing()\n\
  341. X!   <Key>:        CheckInsert() insert-char()";
  342. X  
  343. X   XtSetArg(args[0], XtNwidth, XMail.fileBoxWidth);
  344. X   XtSetArg(args[1], XtNfont, TextFontStr);
  345. X   XtSetArg(args[2], XtNborderWidth, 0);
  346. X--- 390,400 ----
  347. X    <Key>BackSpace:    DeleteChar()\n\
  348. X    <Key>Linefeed:    DoNothing()\n\
  349. X    <Key>Return:        DoNothing()\n\
  350. X!   <Key>:        CheckInsert() insert-char()\n\
  351. X!   <Btn1Down>:           select-start()\n\
  352. X!   <Btn2Down>:           CheckInsert() insert-selection(PRIMARY, CUT_BUFFER0)";
  353. X  
  354. X+ 
  355. X   XtSetArg(args[0], XtNwidth, XMail.fileBoxWidth);
  356. X   XtSetArg(args[1], XtNfont, TextFontStr);
  357. X   XtSetArg(args[2], XtNborderWidth, 0);
  358. X***************
  359. X*** 449,454 ****
  360. X--- 454,461 ----
  361. X   Arg    args[6];
  362. X   Widget    w;
  363. X  
  364. X+  static String Trans = "#override\n\
  365. X+             :<Key>Linefeed:    MenuPopdown(help)";
  366. X  
  367. X   XtSetArg(args[0], XtNborderWidth, 3);
  368. X   w = XtCreatePopupShell("help", overrideShellWidgetClass, parent, args, 1);
  369. X***************
  370. X*** 458,464 ****
  371. X   XtSetArg(args[2], XtNfont, HelpFontStr);
  372. X   XtSetArg(args[3], XtNeditType, (XtArgVal) XttextRead);
  373. X   XtSetArg(args[4], XtNtextOptions, wordBreak);
  374. X!  XtCreateManagedWidget("helpWindow", asciiStringWidgetClass, w, args, 5);
  375. X  } /* CreateHelpWindow */
  376. X  
  377. X  
  378. X--- 465,472 ----
  379. X   XtSetArg(args[2], XtNfont, HelpFontStr);
  380. X   XtSetArg(args[3], XtNeditType, (XtArgVal) XttextRead);
  381. X   XtSetArg(args[4], XtNtextOptions, wordBreak);
  382. X!  XtSetArg(args[5], XtNtranslations, XtParseTranslationTable(Trans));
  383. X!  XtCreateManagedWidget("helpWindow", asciiStringWidgetClass, w, args, 6);
  384. X  } /* CreateHelpWindow */
  385. X  
  386. X  
  387. X***************
  388. X*** 470,482 ****
  389. X  Widget parent;
  390. X  {
  391. X   Arg    args[8];
  392. X   Widget    w;
  393. X  
  394. X!  static String translations =
  395. X!     "<Key>:        DoNothing() \n\
  396. X!     <Btn1Down>:    select-start() SetSelect() \n\
  397. X!     <Btn3Down>:    select-start() SetSelect() \n\
  398. X!     <Btn3Up>:    DoSelected(p)";
  399. X  
  400. X   XtSetArg(args[0], XtNheight, XMail.indexHeight);
  401. X   XtSetArg(args[1], XtNfont, TextFontStr);
  402. X--- 478,508 ----
  403. X  Widget parent;
  404. X  {
  405. X   Arg    args[8];
  406. X+  int    n;
  407. X   Widget    w;
  408. X  
  409. X!  static String translations = "\
  410. X!     Ctrl<Key>L:        redraw-display() \n\
  411. X!     Ctrl<Key>V:        next-page() \n\
  412. X!     Ctrl<Key>Z:        scroll-one-line-up() \n\
  413. X!     Meta<Key>V:        previous-page() \n\
  414. X!     Meta<Key>Z:        scroll-one-line-down() \n\
  415. X!     Meta<Key>\<:        beginning-of-file() \n\
  416. X!     Meta<Key>\>:        end-of-file() \n\
  417. X!     None <Key>Return:    scroll-one-line-up() \n\
  418. X!     None <Key>space:    next-page() \n\
  419. X!     None <Key>G:        end-of-file() \n\
  420. X!     None <Key>b:        previous-page() \n\
  421. X!     None <Key>j:        scroll-one-line-up() \n\
  422. X!     None <Key>k:        scroll-one-line-down() \n\
  423. X!     None <Key>-:        scroll-one-line-down() \n\
  424. X!     None <Key>p:        beginning-of-file() \n\
  425. X!     None <Key>\':        beginning-of-file() \n\
  426. X!     <Btn1Down>:        select-start() SetSelect() \n\
  427. X!     <Btn1Motion>:        extend-adjust() \n\
  428. X!     <Btn1Up>:        extend-end(PRIMARY, CUT_BUFFER0) \n\
  429. X!     <Btn3Down>:        select-start() SetSelect() \n\
  430. X!     <Btn3Up>:        DoSelected(p)";
  431. X  
  432. X   XtSetArg(args[0], XtNheight, XMail.indexHeight);
  433. X   XtSetArg(args[1], XtNfont, TextFontStr);
  434. X***************
  435. X*** 485,492 ****
  436. X   XtSetArg(args[4], XtNeditType, (XtArgVal) XttextEdit);
  437. X   XtSetArg(args[5], XtNtextOptions, scrollVertical | wordBreak);
  438. X   XtSetArg(args[6], XtNtranslations, XtParseTranslationTable(translations));
  439. X  
  440. X!  w = XtCreateManagedWidget("indexWindow",asciiStringWidgetClass,parent,args,7);
  441. X  
  442. X   AddHelpText(w, "index", Index_Help_Text);
  443. X  } /* CreateIndexWindow */
  444. X--- 511,522 ----
  445. X   XtSetArg(args[4], XtNeditType, (XtArgVal) XttextEdit);
  446. X   XtSetArg(args[5], XtNtextOptions, scrollVertical | wordBreak);
  447. X   XtSetArg(args[6], XtNtranslations, XtParseTranslationTable(translations));
  448. X+  n = 7;
  449. X+ #if XtSpecificationRelease >= 4
  450. X+  XtSetArg(args[n], XtNdisplayCaret, (XtArgVal) False);        n++;
  451. X+ #endif
  452. X  
  453. X!  w = XtCreateManagedWidget("indexWindow",asciiStringWidgetClass,parent,args,n);
  454. X  
  455. X   AddHelpText(w, "index", Index_Help_Text);
  456. X  } /* CreateIndexWindow */
  457. X***************
  458. X*** 537,543 ****
  459. X  {
  460. X   Arg        args[4];
  461. X   Widget        icon, mb, topbox;
  462. X!  int        x, y, width, height;
  463. X  /*
  464. X  ** Special added actions
  465. X  */
  466. X--- 567,573 ----
  467. X  {
  468. X   Arg        args[4];
  469. X   Widget        icon, mb, topbox;
  470. X!  int        n, x, y;
  471. X  /*
  472. X  ** Special added actions
  473. X  */
  474. X***************
  475. X*** 554,559 ****
  476. X--- 584,590 ----
  477. X      {"SetMenu",        (XtActionProc) SetMenu},
  478. X      {"DoNothing",        (XtActionProc) DoNothing},
  479. X      {"DoSelected",        (XtActionProc) DoSelected},
  480. X+     {"SavePos",        (XtActionProc) SavePos},
  481. X      {"SetAliases",        (XtActionProc) SetAliases},
  482. X      {"SetCursor",        (XtActionProc) SetCursor},
  483. X      {"SetDirectory",    (XtActionProc) SetDirectory},
  484. X***************
  485. X*** 566,571 ****
  486. X--- 597,603 ----
  487. X      {"MyNotify",        (XtActionProc) MyNotify},
  488. X      {"NextField",        (XtActionProc) NextField},
  489. X      {"PrintMsg",        (XtActionProc) PrintMsg},
  490. X+     {"SetPos",        (XtActionProc) SetPos},
  491. X      {"Quit",        (XtActionProc) Quit},
  492. X          {NULL, NULL}
  493. X        };
  494. X***************
  495. X*** 588,602 ****
  496. X  /*
  497. X  ** Create an icon window for the mailwatchWidget
  498. X  */
  499. X-  x = y = 0;
  500. X-  if (XMail.iconGeometry)
  501. X-     XParseGeometry(XMail.iconGeometry, &x, &y, &width, &height);
  502. X- 
  503. X   XtSetArg(args[0], XtNwidth, (XtArgVal) mail_width);
  504. X   XtSetArg(args[1], XtNheight, (XtArgVal) mail_height);
  505. X!  XtSetArg(args[2], XtNx, (XtArgVal) x);
  506. X!  XtSetArg(args[3], XtNy, (XtArgVal) y);
  507. X!  icon = XtCreateWidget("icon", applicationShellWidgetClass, toplevel, args, 4);
  508. X   mb = XtCreateManagedWidget("mailbox", mailwatchWidgetClass, icon, NULL, 0);
  509. X   XtAddCallback(mb, XtNcallback, SetNewmail, NULL);
  510. X  } /* CreateSubWindows */ 
  511. X--- 620,634 ----
  512. X  /*
  513. X  ** Create an icon window for the mailwatchWidget
  514. X  */
  515. X   XtSetArg(args[0], XtNwidth, (XtArgVal) mail_width);
  516. X   XtSetArg(args[1], XtNheight, (XtArgVal) mail_height);
  517. X!  n = 2;
  518. X!  if (XMail.iconGeometry) {
  519. X!     ParseIconGeometry(XMail.iconGeometry, &x, &y);
  520. X!     XtSetArg(args[n], XtNx, (XtArgVal) x);        n++;
  521. X!     XtSetArg(args[n], XtNy, (XtArgVal) y);        n++;
  522. X!    }
  523. X!  icon = XtCreateWidget("icon", applicationShellWidgetClass, toplevel, args, n);
  524. X   mb = XtCreateManagedWidget("mailbox", mailwatchWidgetClass, icon, NULL, 0);
  525. X   XtAddCallback(mb, XtNcallback, SetNewmail, NULL);
  526. X  } /* CreateSubWindows */ 
  527. X***************
  528. X*** 609,625 ****
  529. X  CreateTextWindow(parent)
  530. X  Widget parent;
  531. X  {
  532. X!  Arg     args[4];
  533. X   Widget    tw;
  534. X  
  535. X  
  536. X   XtSetArg(args[0], XtNmin, XMail.textMinHeight);
  537. X   XtSetArg(args[1], XtNheight, XMail.textHeight);
  538. X   XtSetArg(args[2], XtNfont, TextFontStr);
  539. X   XtSetArg(args[3], XtNtextOptions, scrollVertical | wordBreak);
  540. X!  tw = XtCreateManagedWidget("textWindow",asciiStringWidgetClass,parent,args,4);
  541. X  
  542. X   AddHelpText(tw, "text", Text_Help_Text);
  543. X  } /* CreateTextWindow */
  544. X  
  545. X  
  546. X--- 641,779 ----
  547. X  CreateTextWindow(parent)
  548. X  Widget parent;
  549. X  {
  550. X!  Arg     args[5];
  551. X!  int    indx;
  552. X   Widget    tw;
  553. X+ #ifndef SUNOS_4
  554. X+  static String Trans = "\
  555. X+     Ctrl <Key>L:        redraw-display() \n\
  556. X+     Ctrl <Key>V:        next-page() \n\
  557. X+     Ctrl <Key>Z:        scroll-one-line-up() \n\
  558. X+     Meta <Key>V:        previous-page() \n\
  559. X+     Meta <Key>Z:        scroll-one-line-down() \n\
  560. X+     Meta <Key>\<:        beginning-of-file() \n\
  561. X+     Meta <Key>\>:        end-of-file() \n\
  562. X+         None <Key>Linefeed:    MenuPopdown(help) \n\
  563. X+     None <Key>Return:    scroll-one-line-up() \n\
  564. X+     None <Key>-:        scroll-one-line-down() \n\
  565. X+     None <Key>\':        beginning-of-file() \n\
  566. X+     None <Key>space:    next-page() \n\
  567. X+     None <Key>a:        DoReply(a) \n\
  568. X+     None <Key>b:        previous-page() \n\
  569. X+      None <Key>c:        DoSave(c) \n\
  570. X+      None <Key>d:        DoSelected(d) \n\
  571. X+      None <Key>f:        DoSelected(P) \n\
  572. X+     None <Key>j:        scroll-one-line-up() \n\
  573. X+     None <Key>k:        scroll-one-line-down() \n\
  574. X+      None <Key>m:        DoReply(s) \n\
  575. X+      None <Key>n:        DoSelected(n) \n\
  576. X+      None <Key>p:        DoSelected(-) \n\
  577. X+      None <Key>q:        Quit(q) \n\
  578. X+      None <Key>r:        DoSelected(p) \n\
  579. X+      None <Key>s:        DoSave(s) \n\
  580. X+     None <Key>u:        DoSelected(u) \n\
  581. X+      None <Key>w:        DoSave(w) \n\
  582. X+      None <Key>x:        Quit(x) \n\
  583. X+          <Key>A:        DoReply(A) \n\
  584. X+           <Key>C:        DoSave(C) \n\
  585. X+          <Key>F:        DoReply(S) \n\
  586. X+          <Key>G:        end-of-file() \n\
  587. X+           <Key>M:        DoReply(r) \n\
  588. X+           <Key>N:        DoCmd(file %) \n\
  589. X+           <Key>P:        PrintMsg() \n\
  590. X+          <Key>R:        DoReply(R) \n\
  591. X+           <Key>S:        DoSave(S) \n\
  592. X+     <Key>?:            SetHelp(text2) \n\
  593. X+     <Btn1Down>:        select-start() \n\
  594. X+     <Btn1Motion>:        extend-adjust() \n\
  595. X+     <Btn1Up>:        extend-end(PRIMARY, CUT_BUFFER0) \n\
  596. X+     <Btn2Down>:        insert-selection(PRIMARY, CUT_BUFFER0) \n\
  597. X+     <Btn3Down>:        extend-start() \n\
  598. X+     <Btn3Motion>:        extend-adjust() \n\
  599. X+     <Btn3Up>:        extend-end(PRIMARY, CUT_BUFFER0)";
  600. X+ #else
  601. X+  static String Trans = "\
  602. X+     Ctrl <Key>L:        redraw-display() \n\
  603. X+     Ctrl <Key>V:        next-page() \n\
  604. X+     Ctrl <Key>Z:        scroll-one-line-up() \n\
  605. X+     Meta <Key>V:        previous-page() \n\
  606. X+     Meta <Key>Z:        scroll-one-line-down() \n\
  607. X+     Meta <Key>\<:        beginning-of-file() \n\
  608. X+     Meta <Key>\>:        end-of-file() \n\
  609. X+     Shift <Key>A:        DoReply(A) \n\
  610. X+      Shift <Key>C:        DoSave(C) \n\
  611. X+     Shift <Key>F:        DoReply(S) \n\
  612. X+     Shift <Key>G:        end-of-file() \n\
  613. X+      Shift <Key>M:        DoReply(r) \n\
  614. X+      Shift <Key>N:        DoCmd(file %) \n\
  615. X+      Shift <Key>P:        PrintMsg() \n\
  616. X+     Shift <Key>R:        DoReply(R) \n\
  617. X+      Shift <Key>S:        DoSave(S) \n\
  618. X+         None <Key>Linefeed:    MenuPopdown(help) \n\
  619. X+     None <Key>Return:    scroll-one-line-up() \n\
  620. X+     None <Key>-:        scroll-one-line-down() \n\
  621. X+     None <Key>\':        beginning-of-file() \n\
  622. X+     None <Key>space:    next-page() \n\
  623. X+     None <Key>a:        DoReply(a) \n\
  624. X+     None <Key>b:        previous-page() \n\
  625. X+      None <Key>c:        DoSave(c) \n\
  626. X+      None <Key>d:        DoSelected(d) \n\
  627. X+      None <Key>f:        DoSelected(P) \n\
  628. X+     None <Key>j:        scroll-one-line-up() \n\
  629. X+     None <Key>k:        scroll-one-line-down() \n\
  630. X+      None <Key>m:        DoReply(s) \n\
  631. X+      None <Key>n:        DoSelected(n) \n\
  632. X+      None <Key>p:        DoSelected(-) \n\
  633. X+      None <Key>q:        Quit(q) \n\
  634. X+      None <Key>r:        DoSelected(p) \n\
  635. X+      None <Key>s:        DoSave(s) \n\
  636. X+     None <Key>u:        DoSelected(u) \n\
  637. X+      None <Key>w:        DoSave(w) \n\
  638. X+      None <Key>x:        Quit(x) \n\
  639. X+     <Key>?:            SetHelp(text2) \n\
  640. X+     <Btn1Down>:        select-start() \n\
  641. X+     <Btn1Motion>:        extend-adjust() \n\
  642. X+     <Btn1Up>:        extend-end(PRIMARY, CUT_BUFFER0) \n\
  643. X+     <Btn2Down>:        insert-selection(PRIMARY, CUT_BUFFER0) \n\
  644. X+     <Btn3Down>:        extend-start() \n\
  645. X+     <Btn3Motion>:        extend-adjust() \n\
  646. X+     <Btn3Up>:        extend-end(PRIMARY, CUT_BUFFER0)";
  647. X+ #endif
  648. X  
  649. X+ #if XtSpecificationRelease >= 4
  650. X+  static String trans_2 = "#override \
  651. X+     Ctrl <Key>R:        search(backward) \n\
  652. X+     Ctrl <Key>S:        search(forward)";
  653. X+ #endif
  654. X  
  655. X   XtSetArg(args[0], XtNmin, XMail.textMinHeight);
  656. X   XtSetArg(args[1], XtNheight, XMail.textHeight);
  657. X   XtSetArg(args[2], XtNfont, TextFontStr);
  658. X   XtSetArg(args[3], XtNtextOptions, scrollVertical | wordBreak);
  659. X!  XtSetArg(args[4], XtNtranslations, XtParseTranslationTable(Trans));
  660. X!  tw = XtCreateManagedWidget("textWindow",asciiStringWidgetClass,parent,args,5);
  661. X  
  662. X+ #if XtSpecificationRelease >= 4
  663. X+  XtOverrideTranslations(tw, XtParseTranslationTable(trans_2));
  664. X+ #endif
  665. X+ 
  666. X+ #ifdef SUNOS_4
  667. X+  XtOverrideTranslations(tw,
  668. X+  XtParseTranslationTable("#override None<Key>i: DoCmd(inc)"));
  669. X+ #endif
  670. X+ 
  671. X   AddHelpText(tw, "text", Text_Help_Text);
  672. X+ 
  673. X+  for (indx = 0; HelpNames[indx]; indx++)
  674. X+      if (strcmp(HelpNames[indx], "text2") == 0) break;
  675. X+ 
  676. X+  if (HelpNames[indx]) {
  677. X+     XtSetArg(args[0], XtNstring, (XtArgVal) Text2_Help_Text);
  678. X+     XtSetArg(args[1], XtNlength, (XtArgVal) strlen(Text2_Help_Text));
  679. X+     XtSetArg(args[2], XtNeditType, (XtArgVal) XttextRead);
  680. X+ 
  681. X+     HelpStrings[indx] = XtStringSourceCreate(WidgetOf(WidgetOf(WidgetOf(toplevel,"topBox"),"help"),"helpWindow"),args,3);
  682. X+    }
  683. X  } /* CreateTextWindow */
  684. X  
  685. X  
  686. X***************
  687. X*** 699,728 ****
  688. X  {
  689. X   Arg        args[12];
  690. X   Cardinal     n;
  691. X  
  692. X   static String trans = "#override \
  693. X!   <Key>Delete: delete-previous-character() beginning-of-line() end-of-line()\n\
  694. X!   <Key>BackSpace: delete-previous-character() beginning-of-line() end-of-line()\n\
  695. X!   Ctrl<Key>H:  delete-previous-character() beginning-of-line() end-of-line()\n\
  696. X!   Ctrl<Key>U:  beginning-of-line() kill-to-end-of-line() \n\
  697. X!   Ctrl<Key>W:  delete-previous-word() beginning-of-line() end-of-line()\n\
  698. X!   <Key>Return: NextField()";
  699. X  
  700. X   static String b_trans = "#override \
  701. X!   <Btn3Down>:  SetAliases() MenuPopup(aliasList)\n\
  702. X!   <Btn3Motion>: DoNothing()\n\
  703. X!   <Btn3Up>:    DoNothing()\n\
  704. X!   <Key>Delete: delete-previous-character() beginning-of-line() end-of-line()\n\
  705. X!   <Key>BackSpace: delete-previous-character() beginning-of-line() end-of-line()\n\
  706. X!   Ctrl<Key>H:  delete-previous-character() beginning-of-line() end-of-line()\n\
  707. X!   Ctrl<Key>U:  beginning-of-line() kill-to-end-of-line() \n\
  708. X!   Ctrl<Key>W:  delete-previous-word() beginning-of-line() end-of-line()\n\
  709. X!   <Key>Return: NextField()";
  710. X  
  711. X   n  = XMail.shellWidth - 106;    /* - (scn + 2*(internal width + def.dist.)) */
  712. X   n -= TEXTWIDTH * 9 - 6;    /* minus label text width less fudge factor */
  713. X   XtSetArg(args[0], XtNwidth, n);
  714. X- 
  715. X   XtSetArg(args[1], XtNinput, True);
  716. X   XtSetArg(args[2], XtNheight, XMail.buttonHeight);
  717. X   XtSetArg(args[3], XtNfont, TextFontStr);
  718. X--- 853,876 ----
  719. X  {
  720. X   Arg        args[12];
  721. X   Cardinal     n;
  722. X+  Widget        w;
  723. X  
  724. X   static String trans = "#override \
  725. X!   <Key>Delete:    delete-previous-character() SavePos() beginning-of-file() SetPos()\n\
  726. X!   <Key>BackSpace: delete-previous-character() SavePos() beginning-of-file() SetPos()\n\
  727. X!   Ctrl<Key>H:     delete-previous-character() SavePos() beginning-of-file() SetPos()\n\
  728. X!   Ctrl<Key>U:     beginning-of-line() kill-to-end-of-line() \n\
  729. X!   Ctrl<Key>W:     delete-previous-word() SavePos() beginning-of-file() SetPos()\n\
  730. X!   <Key>Return:    NextField()";
  731. X  
  732. X   static String b_trans = "#override \
  733. X!   <Btn3Down>:     SetAliases() MenuPopup(aliasList)\n\
  734. X!   <Btn3Motion>:   DoNothing()\n\
  735. X!   <Btn3Up>:       DoNothing()";
  736. X  
  737. X   n  = XMail.shellWidth - 106;    /* - (scn + 2*(internal width + def.dist.)) */
  738. X   n -= TEXTWIDTH * 9 - 6;    /* minus label text width less fudge factor */
  739. X   XtSetArg(args[0], XtNwidth, n);
  740. X   XtSetArg(args[1], XtNinput, True);
  741. X   XtSetArg(args[2], XtNheight, XMail.buttonHeight);
  742. X   XtSetArg(args[3], XtNfont, TextFontStr);
  743. X***************
  744. X*** 731,742 ****
  745. X   XtSetArg(args[6], XtNlength, len);
  746. X   XtSetArg(args[7], XtNeditType, (XtArgVal) XttextEdit);
  747. X   XtSetArg(args[8], XtNtextOptions, wordBreak);
  748. X! 
  749. X!  if (strcmp(name, "Subject") == 0) {
  750. X!     XtSetArg(args[9], XtNtranslations, XtParseTranslationTable(trans));
  751. X!    } else {
  752. X!     XtSetArg(args[9], XtNtranslations, XtParseTranslationTable(b_trans));
  753. X!    }
  754. X   n = 10;
  755. X  
  756. X  #if XtSpecificationRelease >= 4
  757. X--- 879,885 ----
  758. X   XtSetArg(args[6], XtNlength, len);
  759. X   XtSetArg(args[7], XtNeditType, (XtArgVal) XttextEdit);
  760. X   XtSetArg(args[8], XtNtextOptions, wordBreak);
  761. X!  XtSetArg(args[9], XtNtranslations, XtParseTranslationTable(trans));
  762. X   n = 10;
  763. X  
  764. X  #if XtSpecificationRelease >= 4
  765. X***************
  766. X*** 743,747 ****
  767. X   XtSetArg(args[n], XtNautoFill, True);                    n++;
  768. X  #endif
  769. X  
  770. X!  return( XtCreateManagedWidget(name,asciiStringWidgetClass,parent,args,n) );
  771. X  } /* CreateInputWindow */
  772. X--- 886,915 ----
  773. X   XtSetArg(args[n], XtNautoFill, True);                    n++;
  774. X  #endif
  775. X  
  776. X!  w = XtCreateManagedWidget(name, asciiStringWidgetClass, parent, args, n);
  777. X! 
  778. X!  if (strcmp(name, "Subject") != 0)
  779. X!     XtOverrideTranslations(w, XtParseTranslationTable(b_trans));
  780. X! 
  781. X!  return( w );
  782. X  } /* CreateInputWindow */
  783. X+ 
  784. X+ /* 
  785. X+ ** @(#)ParseIconGeometry() - Parse the icon geometry
  786. X+ */
  787. X+ void
  788. X+ ParseIconGeometry(str, x, y)
  789. X+ char    *str;
  790. X+ int    *x, *y;
  791. X+ {
  792. X+  int        res;
  793. X+  unsigned int    w, h;
  794. X+ 
  795. X+  *x = 0;
  796. X+  *y = 0;
  797. X+  res = XParseGeometry(str, x, y, &w, &h);
  798. X+  if ((res & (XNegative|XValue)) == (XNegative|XValue))
  799. X+     *x = RootWidth + *x - mail_width;
  800. X+  if ((res & (YNegative|YValue)) == (YNegative|YValue))
  801. X+     *y = RootHeight + *y - mail_height;
  802. X+ } /* ParseIconGeometry */
  803. X*** ../v1.1/xmail.c    Mon Jun  4 09:48:45 1990
  804. X--- xmail.c    Mon Aug 27 11:09:22 1990
  805. X***************
  806. X*** 32,38 ****
  807. X   * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL,
  808. X   * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  809. X   * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  810. X!  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  811. X   * PERFORMANCE OF THIS SOFTWARE.
  812. X   *
  813. X   * The following software modules were created and are Copyrighted by National
  814. X--- 32,38 ----
  815. X   * EVENT SHALL NATIONAL SEMICONDUCTOR CORPORATION BE LIABLE FOR ANY SPECIAL,
  816. X   * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  817. X   * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  818. X!  * OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  819. X   * PERFORMANCE OF THIS SOFTWARE.
  820. X   *
  821. X   * The following software modules were created and are Copyrighted by National
  822. X***************
  823. X*** 48,57 ****
  824. X  #include "global.h"
  825. X  #include "Mailwatch.h"            /* use as icon and watch for newmail */
  826. X  
  827. X! #if XtSpecificationRelease >= 4
  828. X! #include <X11/Xaw/CommandP.h>
  829. X  #else
  830. X! #include <X11/CommandP.h>
  831. X  #endif
  832. X  
  833. X  #include "icon.nomail"            /* default icon pixmap source */
  834. X--- 48,57 ----
  835. X  #include "global.h"
  836. X  #include "Mailwatch.h"            /* use as icon and watch for newmail */
  837. X  
  838. X! #if XtSpecificationRelease < 4
  839. X! #include <X11/CommandP.h>        /* R3 */
  840. X  #else
  841. X! #include <X11/Xaw/CommandP.h>        /* R4 */
  842. X  #endif
  843. X  
  844. X  #include "icon.nomail"            /* default icon pixmap source */
  845. X***************
  846. X*** 61,67 ****
  847. X  #define Offset(field) (XtOffset(XmailResources *, field))
  848. X  
  849. X  static char what[] =
  850. X!  "@(#)xmail.c 1.1 90/05/29 Copyright 1989 National Semiconductor Corp.";
  851. X  
  852. X  static XtResource resrcs[] = {
  853. X      {XtNfont, XtCFont, XtRString, sizeof(char *),
  854. X--- 61,67 ----
  855. X  #define Offset(field) (XtOffset(XmailResources *, field))
  856. X  
  857. X  static char what[] =
  858. X!  "@(#)xmail.c 1.2 90/08/14 Copyright 1989, 1990 National Semiconductor Corp.";
  859. X  
  860. X  static XtResource resrcs[] = {
  861. X      {XtNfont, XtCFont, XtRString, sizeof(char *),
  862. X***************
  863. X*** 72,81 ****
  864. X          Offset(iconGeometry), XtRString, (caddr_t) NULL},
  865. X      {"MFileName", "MFileName", XtRString, sizeof(char *), 
  866. X      Offset(MFileName), XtRString, (caddr_t) NULL},
  867. X-     {"iconic", "Iconic", XtRBoolean, sizeof(Boolean), 
  868. X-     Offset(iconic), XtRImmediate, (caddr_t) False},
  869. X      {"bellRing", "BellRing", XtRBoolean, sizeof(Boolean), 
  870. X      Offset(bellRing), XtRImmediate, (caddr_t) True},
  871. X      {"mailopt_n", "Mailopt_n", XtRBoolean, sizeof(Boolean), 
  872. X      Offset(mailopt_n), XtRImmediate, (caddr_t) False},
  873. X      {"mailopt_U", "Mailopt_U", XtRBoolean, sizeof(Boolean), 
  874. X--- 72,83 ----
  875. X          Offset(iconGeometry), XtRString, (caddr_t) NULL},
  876. X      {"MFileName", "MFileName", XtRString, sizeof(char *), 
  877. X      Offset(MFileName), XtRString, (caddr_t) NULL},
  878. X      {"bellRing", "BellRing", XtRBoolean, sizeof(Boolean), 
  879. X      Offset(bellRing), XtRImmediate, (caddr_t) True},
  880. X+     {"expert", "Expert", XtRBoolean, sizeof(Boolean), 
  881. X+     Offset(expert), XtRImmediate, (caddr_t) False},
  882. X+     {"iconic", "Iconic", XtRBoolean, sizeof(Boolean), 
  883. X+     Offset(iconic), XtRImmediate, (caddr_t) False},
  884. X      {"mailopt_n", "Mailopt_n", XtRBoolean, sizeof(Boolean), 
  885. X      Offset(mailopt_n), XtRImmediate, (caddr_t) False},
  886. X      {"mailopt_U", "Mailopt_U", XtRBoolean, sizeof(Boolean), 
  887. X***************
  888. X*** 84,98 ****
  889. X      Offset(Show_Last), XtRImmediate, (caddr_t) True},
  890. X  };
  891. X  
  892. X  static XrmOptionDescRec Opts[] = {
  893. X!     {"-helpfont",    "*helpFont",    XrmoptionSepArg, (caddr_t) NULL},
  894. X!     {"-iconGeometry",    "*iconGeometry", XrmoptionSepArg, (caddr_t) NULL},
  895. X!     {"-iconic",        "*iconic",    XrmoptionNoArg, (caddr_t) "True"},
  896. X!     {"-f",        "*MFileName",    XrmoptionSepArg, (caddr_t) NULL},
  897. X!     {"-nb",        "*bellRing",    XrmoptionNoArg, (caddr_t) "False"},
  898. X!     {"-n",        "*mailopt_n",    XrmoptionNoArg, (caddr_t) "True"},
  899. X!     {"-U",        "*mailopt_U",    XrmoptionNoArg, (caddr_t) "True"},
  900. X!     {"-ls",        "*Show_Last",    XrmoptionNoArg, (caddr_t) "False"},
  901. X  };
  902. X  
  903. X  char    *IndexBuf;        /* buffer for index widget    */
  904. X--- 86,105 ----
  905. X      Offset(Show_Last), XtRImmediate, (caddr_t) True},
  906. X  };
  907. X  
  908. X+ #undef Offset
  909. X+ 
  910. X  static XrmOptionDescRec Opts[] = {
  911. X!     {"-e",        "expert",    XrmoptionNoArg, (caddr_t) "True"},
  912. X!     {"-f",        "MFileName",    XrmoptionSepArg, (caddr_t) NULL},
  913. X!     {"-helpfont",    "helpFont",    XrmoptionSepArg, (caddr_t) NULL},
  914. X!     {"-iconGeometry",    "iconGeometry", XrmoptionSepArg, (caddr_t) NULL},
  915. X!     {"-iconic",        "iconic",    XrmoptionNoArg, (caddr_t) "True"},
  916. X!     {"-ls",        "Show_Last",    XrmoptionNoArg, (caddr_t) "False"},
  917. X!     {"-nb",        "bellRing",    XrmoptionNoArg, (caddr_t) "False"},
  918. X!     {"-n",        "mailopt_n",    XrmoptionNoArg, (caddr_t) "True"},
  919. X!     {"-U",        "mailopt_U",    XrmoptionNoArg, (caddr_t) "True"},
  920. X!     {"-u",        "icon*useName",    XrmoptionNoArg, (caddr_t) "True"},
  921. X!     {"-rv",    "icon*reverseVideo",    XrmoptionNoArg, (caddr_t) "True"},
  922. X  };
  923. X  
  924. X  char    *IndexBuf;        /* buffer for index widget    */
  925. X***************
  926. X*** 105,111 ****
  927. X  char     BccBuf[BUFSIZ];        /* message Bcc list        */
  928. X  char     tmpName[BUFSIZ];    /* message temporary filename    */
  929. X  char     *MailPrompt;        /* mail program prompt string    */
  930. X! char    *HelpNames[24];        /* array of help window names    */
  931. X  char    **mailargv;        /* array passed to mail child    */
  932. X  
  933. X  int    mailargc;        /* counter passed to mail child    */
  934. X--- 112,118 ----
  935. X  char     BccBuf[BUFSIZ];        /* message Bcc list        */
  936. X  char     tmpName[BUFSIZ];    /* message temporary filename    */
  937. X  char     *MailPrompt;        /* mail program prompt string    */
  938. X! char    *HelpNames[25];        /* array of help window names    */
  939. X  char    **mailargv;        /* array passed to mail child    */
  940. X  
  941. X  int    mailargc;        /* counter passed to mail child    */
  942. X***************
  943. X*** 119,125 ****
  944. X  Widget  toplevel;         /* top level shell widget */
  945. X  
  946. X  XmailResources     XMail;        /* application resources of xmail */
  947. X! XtTextSource    HelpStrings[23];
  948. X  XFontStruct    *TextFontStr, *HelpFontStr;
  949. X  
  950. X  
  951. X--- 126,132 ----
  952. X  Widget  toplevel;         /* top level shell widget */
  953. X  
  954. X  XmailResources     XMail;        /* application resources of xmail */
  955. X! XtTextSource    HelpStrings[24];
  956. X  XFontStruct    *TextFontStr, *HelpFontStr;
  957. X  
  958. X  
  959. X***************
  960. X*** 173,181 ****
  961. X   HelpNames[i++] = "read";    HelpNames[i++] = "reply";
  962. X   HelpNames[i++] = "save";    HelpNames[i++] = "Send";
  963. X   HelpNames[i++] = "status";    HelpNames[i++] = "Subject";
  964. X!  HelpNames[i++] = "text";    HelpNames[i++] = "title";
  965. X!  HelpNames[i++] = "To";        HelpNames[i++] = "Autograph";
  966. X!  HelpNames[i]   = NULL;
  967. X  
  968. X   strcpy(Command, "Start");        /* let parser know we've started */
  969. X   Recipient[0] = SubjBuf[0] = CcBuf[0] = BccBuf[0] = '\0';
  970. X--- 180,188 ----
  971. X   HelpNames[i++] = "read";    HelpNames[i++] = "reply";
  972. X   HelpNames[i++] = "save";    HelpNames[i++] = "Send";
  973. X   HelpNames[i++] = "status";    HelpNames[i++] = "Subject";
  974. X!  HelpNames[i++] = "text";    HelpNames[i++] = "text2";
  975. X!  HelpNames[i++] = "title";    HelpNames[i++] = "To";
  976. X!  HelpNames[i++] = "Autograph";    HelpNames[i]   = NULL;
  977. X  
  978. X   strcpy(Command, "Start");        /* let parser know we've started */
  979. X   Recipient[0] = SubjBuf[0] = CcBuf[0] = BccBuf[0] = '\0';
  980. X***************
  981. X*** 232,238 ****
  982. X   XMail.buttonHeight    = TEXTHEIGHT + (TextFontStr->ascent / 2);
  983. X   XMail.buttonWidth    = XTextWidth(TextFontStr, " Newmail ", 9);
  984. X         buttonSpace      = XMail.buttonWidth + XMail.commandHSpace + 2;
  985. X!  XMail.shellWidth       = (8 * buttonSpace) + 24;    /*  8 buttons per row */
  986. X   XMail.fileBoxWidth     = (4 * buttonSpace) + XMail.buttonWidth + 2;
  987. X   XMail.helpHeight       = HELPHEIGHT * 14;           /* 14 lines by 60 chars */
  988. X   XMail.helpWidth        = XTextWidth(HelpFontStr, "X11Windows", 10) * 6;
  989. X--- 239,245 ----
  990. X   XMail.buttonHeight    = TEXTHEIGHT + (TextFontStr->ascent / 2);
  991. X   XMail.buttonWidth    = XTextWidth(TextFontStr, " Newmail ", 9);
  992. X         buttonSpace      = XMail.buttonWidth + XMail.commandHSpace + 2;
  993. X!  XMail.shellWidth       = (8 * buttonSpace) + 26;    /*  8 buttons per row */
  994. X   XMail.fileBoxWidth     = (4 * buttonSpace) + XMail.buttonWidth + 2;
  995. X   XMail.helpHeight       = HELPHEIGHT * 14;           /* 14 lines by 60 chars */
  996. X   XMail.helpWidth        = XTextWidth(HelpFontStr, "X11Windows", 10) * 6;
  997. X***************
  998. X*** 258,264 ****
  999. X   Display    *dpy;
  1000. X   XSizeHints    size_hints;
  1001. X   XWMHints    wm_hints;
  1002. X!  int        scn, depth, x, y, width, height;
  1003. X   CommandWidget  nm = (CommandWidget)WidgetOf(WidgetOf(WidgetOf(toplevel, "topBox"), "commandPanel"), "Newmail");
  1004. X  
  1005. X  
  1006. X--- 265,271 ----
  1007. X   Display    *dpy;
  1008. X   XSizeHints    size_hints;
  1009. X   XWMHints    wm_hints;
  1010. X!  int        scn, depth, x, y;
  1011. X   CommandWidget  nm = (CommandWidget)WidgetOf(WidgetOf(WidgetOf(toplevel, "topBox"), "commandPanel"), "Newmail");
  1012. X  
  1013. X  
  1014. X***************
  1015. X*** 276,301 ****
  1016. X  /*
  1017. X  ** Notify the window manager about our icon window
  1018. X  */
  1019. X!  wm_hints.input = True;
  1020. X  
  1021. X!  wm_hints.initial_state = (XMail.iconic) ? IconicState : NormalState;
  1022. X  
  1023. X-  x = RootWidth - 58;            /* provide some reasonable defaults */
  1024. X-  y = 83;                /* slightly down the right side top */
  1025. X-  if (XMail.iconGeometry)
  1026. X-     XParseGeometry(XMail.iconGeometry, &x, &y, &width, &height);
  1027. X- 
  1028. X-  wm_hints.icon_x = x;
  1029. X-  wm_hints.icon_y = y;
  1030. X- 
  1031. X-  wm_hints.flags  = InputHint | StateHint | IconPositionHint;
  1032. X- 
  1033. X  #ifndef PIXMAP_ICON
  1034. X!  wm_hints.flags |= IconWindowHint;
  1035. X!  wm_hints.icon_window = XtWindow(XtNameToWidget(toplevel, "icon"));
  1036. X  #else
  1037. X!  wm_hints.flags |= IconPixmapHint;
  1038. X!  wm_hints.icon_pixmap = XCreateBitmapFromData(dpy, XtScreen(toplevel)->root,
  1039. X                                   no_mail_bits, no_mail_width, no_mail_height);
  1040. X  #endif
  1041. X  
  1042. X--- 283,305 ----
  1043. X  /*
  1044. X  ** Notify the window manager about our icon window
  1045. X  */
  1046. X!  wm_hints.input        = True;
  1047. X!  wm_hints.initial_state    = (XMail.iconic) ? IconicState : NormalState;
  1048. X!  wm_hints.flags        = InputHint | StateHint;
  1049. X  
  1050. X!  if (XMail.iconGeometry) {
  1051. X!     ParseIconGeometry(XMail.iconGeometry, &x, &y);
  1052. X!     wm_hints.icon_x    = x;
  1053. X!     wm_hints.icon_y    = y;
  1054. X!     wm_hints.flags    |= IconPositionHint;
  1055. X!    }
  1056. X  
  1057. X  #ifndef PIXMAP_ICON
  1058. X!  wm_hints.flags        |= IconWindowHint;
  1059. X!  wm_hints.icon_window    = XtWindow(XtNameToWidget(toplevel, "icon"));
  1060. X  #else
  1061. X!  wm_hints.flags        |= IconPixmapHint;
  1062. X!  wm_hints.icon_pixmap    = XCreateBitmapFromData(dpy, XtScreen(toplevel)->root,
  1063. X                                   no_mail_bits, no_mail_width, no_mail_height);
  1064. X  #endif
  1065. X  
  1066. X***************
  1067. X*** 350,355 ****
  1068. X--- 354,361 ----
  1069. X   SetHints();
  1070. X  
  1071. X   callMail(mailargc, mailargv);
  1072. X+ 
  1073. X+  XSync(XtDisplay(toplevel), False);
  1074. X  
  1075. X   XtMainLoop();
  1076. X  } /* main */
  1077. X*** ../v1.1/xmail.man    Mon Jun  4 09:48:46 1990
  1078. X--- xmail.man    Mon Aug 27 11:09:22 1990
  1079. X***************
  1080. X*** 1,5 ****
  1081. X  .\"
  1082. X! .\" @(#)xmail.l 1.1 90/05/29 NSC;
  1083. X  .\"
  1084. X  .\" Copyright 1990 by National Semiconductor Corporation.
  1085. X  .\"
  1086. X--- 1,5 ----
  1087. X  .\"
  1088. X! .\" @(#)xmail.l 1.2 90/09/14 NSC;
  1089. X  .\"
  1090. X  .\" Copyright 1990 by National Semiconductor Corporation.
  1091. X  .\"
  1092. X***************
  1093. X*** 30,36 ****
  1094. X  .if t .ds Q ``
  1095. X  .if t .ds U ''
  1096. X  .\"
  1097. X! .TH XMAIL 1 "May 29, 1990" "NSC"
  1098. X  .SH NAME
  1099. X  xmail \- X11 visual interface to the mail program
  1100. X  .SH SYNOPSIS
  1101. X--- 30,36 ----
  1102. X  .if t .ds Q ``
  1103. X  .if t .ds U ''
  1104. X  .\"
  1105. X! .TH XMAIL 1 "August 14, 1990" "NSC"
  1106. X  .SH NAME
  1107. X  xmail \- X11 visual interface to the mail program
  1108. X  .SH SYNOPSIS
  1109. X***************
  1110. X*** 68,77 ****
  1111. X  \*(xM also accepts the following additional options:
  1112. X  .RS
  1113. X  .TP
  1114. X! \fB-iconGeometry \fI+XOff+YOff\fR
  1115. X  provides a command line option for specifying the preferred geometry
  1116. X  location for the \*(xM icon window.  This overrides any \*(xM resource
  1117. X! specification for \*Q\fB*iconGeometry: \fI+XOff+YOff\fR\*U.
  1118. X  .TP
  1119. X  \fB\-nb\fR
  1120. X  tells \*(xM to \fBnot\fR ring the terminal bell when issuing status and
  1121. X--- 68,83 ----
  1122. X  \*(xM also accepts the following additional options:
  1123. X  .RS
  1124. X  .TP
  1125. X! \fB\-e\fR
  1126. X! Sets the \*(xM resource specification \*Q\fB*expert: \fITrue\fR\*U.  This
  1127. X! resource determines whether \*Q\fBconfirm\fR\*U popups will be presented
  1128. X! when commiting changes to a folder or deleting a new message composition.
  1129. X! By default the resource is False, which means confirm popups will be used.
  1130. X! .TP
  1131. X! \fB-iconGeometry \fI[+-]XOff[+-]YOff\fR
  1132. X  provides a command line option for specifying the preferred geometry
  1133. X  location for the \*(xM icon window.  This overrides any \*(xM resource
  1134. X! specification for \*Q\fB*iconGeometry: \fI[+-]XOff[+-]YOff\fR\*U.
  1135. X  .TP
  1136. X  \fB\-nb\fR
  1137. X  tells \*(xM to \fBnot\fR ring the terminal bell when issuing status and
  1138. X***************
  1139. X*** 89,94 ****
  1140. X--- 95,110 ----
  1141. X  The option can also be specified as an \*(xM resource
  1142. X  using the specification \*Q\fB*mailopt_n: \fITrue\fR\*U.
  1143. X  .TP
  1144. X+ \fB\-rv\fR
  1145. X+ tells \*(xM to reverse the foreground and background colors of the icon
  1146. X+ window when displaying the icon.  The option can also be specified as an
  1147. X+ \*(xM resource using the specification \*Q\fB*icon*reverseVideo: \fITrue\fR\*U.
  1148. X+ .TP
  1149. X+ \fB\-u\fR
  1150. X+ tells \*(xM to include the user login name in the icon window when displaying
  1151. X+ the icon.  The option can also be specified as an \*(xM resource
  1152. X+ using the specification \*Q\fB*icon*useName: \fITrue\fR\*U.
  1153. X+ .TP
  1154. X  \fB\-U\fR
  1155. X  tells Mail to convert internet style addresses into uucp format.
  1156. X  This option also is a Mail option, passed on to it during startup.
  1157. X***************
  1158. X*** 116,125 ****
  1159. X  
  1160. X  Immediately below the title bar, an index window
  1161. X  displays header information for the current mail folder.  Message selection
  1162. X! is indicated by highlight of the number of a particular message.
  1163. X  New and unread mail are prefixed with 'N' and 'U' characters.  Deleted
  1164. X  messages not yet removed from the index list have the letter 'D' preceding
  1165. X! the message number.
  1166. X  
  1167. X  Below the index
  1168. X  window, a status window displays status and error messages.  The terminal
  1169. X--- 132,143 ----
  1170. X  
  1171. X  Immediately below the title bar, an index window
  1172. X  displays header information for the current mail folder.  Message selection
  1173. X! is indicated by a \fIgreater-than\fR symbol '>' prefix to the number of a
  1174. X! particular message.
  1175. X  New and unread mail are prefixed with 'N' and 'U' characters.  Deleted
  1176. X  messages not yet removed from the index list have the letter 'D' preceding
  1177. X! the message number.  Keyboard keys can be used to scroll the index window,
  1178. X! in addition to the more traditional mouse on scrollbar mechanism.
  1179. X  
  1180. X  Below the index
  1181. X  window, a status window displays status and error messages.  The terminal
  1182. X***************
  1183. X*** 151,157 ****
  1184. X  
  1185. X  Message text is displayed in the bottom window of the \*(xM shell.
  1186. X  Like the index window above, scroll bars provide easy access to any portion of
  1187. X! the text.  Because the reading of a very large message can take more than a few
  1188. X  moments, \*(xM decides when starting Mail or changing folders that a
  1189. X  message longer
  1190. X  than 65,000 characters will \fBnot\fR be automatically displayed.
  1191. X--- 169,178 ----
  1192. X  
  1193. X  Message text is displayed in the bottom window of the \*(xM shell.
  1194. X  Like the index window above, scroll bars provide easy access to any portion of
  1195. X! the text.  Keyboard keys can also be used to scroll the text window.
  1196. X! In addition, the text window has keyboard definitions to supplant using the
  1197. X! mouse on the command buttons for normal \*(xM command operation.
  1198. X! Because the reading of a very large message can take more than a few
  1199. X  moments, \*(xM decides when starting Mail or changing folders that a
  1200. X  message longer
  1201. X  than 65,000 characters will \fBnot\fR be automatically displayed.
  1202. X***************
  1203. X*** 251,259 ****
  1204. X  Users may append their \fISign\fP or \fIsign\fP autograph (see \fBMail(1)\fR)
  1205. X  once only to the end of the message text.
  1206. X  Pressing the \fIDeliver\fR button causes the message
  1207. X! to be delivered, while the right mouse button displays a menu for the Deliver,
  1208. X! \fICancel\fR (and delete), and Cancel (and save in your dead.letter file)
  1209. X! commands.
  1210. X  
  1211. X  Mail forwarded to another user will be bracketed by a \*Q\fIBegin Forwarded
  1212. X  Message/End Forwarded Message\fR\*U string
  1213. X--- 272,280 ----
  1214. X  Users may append their \fISign\fP or \fIsign\fP autograph (see \fBMail(1)\fR)
  1215. X  once only to the end of the message text.
  1216. X  Pressing the \fIDeliver\fR button causes the message
  1217. X! to be delivered, while the right mouse button displays a menu for \fIDeliver,
  1218. X! ReEdit, Cancel\fR (and delete), and \fICancel\fR (and save in your dead.letter
  1219. X! file) commands.
  1220. X  
  1221. X  Mail forwarded to another user will be bracketed by a \*Q\fIBegin Forwarded
  1222. X  Message/End Forwarded Message\fR\*U string
  1223. X***************
  1224. X*** 267,273 ****
  1225. X  received.
  1226. X  .SH FOLDERS
  1227. X  If the right mouse button is pressed while the cursor is within the
  1228. X! command panel \fBfolder\fR button, \*(xM will display a menu of available
  1229. X  mail folders.
  1230. X  Dragging the cursor while still holding the right mouse button down will allow
  1231. X  the user to highlight a particular folder name.  Releasing the right button
  1232. X--- 288,294 ----
  1233. X  received.
  1234. X  .SH FOLDERS
  1235. X  If the right mouse button is pressed while the cursor is within the
  1236. X! command panel \fBFolder\fR button, \*(xM will display a menu of available
  1237. X  mail folders.
  1238. X  Dragging the cursor while still holding the right mouse button down will allow
  1239. X  the user to highlight a particular folder name.  Releasing the right button
  1240. X***************
  1241. X*** 292,301 ****
  1242. X  
  1243. X  The first request for the folder menu extracts (from Mail or the system) the
  1244. X  necessary information to create the menu.  Subsequent requests simply redisplay
  1245. X! that menu.  To force \*(xM to recalculate the folder menu content, press
  1246. X! the \fBNewmail\fR button, which causes \*(xM to destroy the current folder
  1247. X! menu and re-display your system mail folder.
  1248. X! This provides access to folders created after the start of \*(xM.
  1249. X  .SH FONTS
  1250. X  \*(xM now supports a wider variety of font styles, such as \fICourier\fR and 
  1251. X  \fInew century schoolbook\fR.
  1252. X--- 313,325 ----
  1253. X  
  1254. X  The first request for the folder menu extracts (from Mail or the system) the
  1255. X  necessary information to create the menu.  Subsequent requests simply redisplay
  1256. X! that menu.  To force \*(xM to recalculate the folder menu content, use the
  1257. X! \fBNewmail\fR button option which causes \*(xM to destroy the current folder
  1258. X! menu.  This provides for access to folders created after the start of \*(xM.
  1259. X! Pressing the right mouse button
  1260. X! on the Newmail command box will present the Newmail command menu, which has a
  1261. X! choice to drop the current folder list.  This same option is also available
  1262. X! using the accelerator key and the left mouse button on the Newmail command box.
  1263. X  .SH FONTS
  1264. X  \*(xM now supports a wider variety of font styles, such as \fICourier\fR and 
  1265. X  \fInew century schoolbook\fR.
  1266. X***************
  1267. X*** 337,343 ****
  1268. X  the following additional resource names are recognized:
  1269. X  .RS
  1270. X  .TP 3
  1271. X! \fB\&.geometry: \fI+XOff+YOff\fR
  1272. X  This resource defines the initial startup location for the \*(xM window.
  1273. X  Note the dot (.) just in front of the geometry resource name.
  1274. X  Users are cautioned to \fBnot\fR specify this resource with the
  1275. X--- 361,367 ----
  1276. X  the following additional resource names are recognized:
  1277. X  .RS
  1278. X  .TP 3
  1279. X! \fB\&.geometry: \fI[+-]XOff[+-]YOff\fR
  1280. X  This resource defines the initial startup location for the \*(xM window.
  1281. X  Note the dot (.) just in front of the geometry resource name.
  1282. X  Users are cautioned to \fBnot\fR specify this resource with the
  1283. X***************
  1284. X*** 345,350 ****
  1285. X--- 369,384 ----
  1286. X  and send/reply) to orient to that same starting location, rather than be
  1287. X  anchored to the intended window.
  1288. X  .TP 3
  1289. X+ \fB*expert: \fI<boolean>\fR
  1290. X+ This boolean defines whether the \*(xM user requires confirmation of
  1291. X+ folder commits or composed message deletions.  Whenever an action
  1292. X+ would make a permanent un-recoverable change to the \*(xM environment, a
  1293. X+ popup confirmation window will be presented for the user, to assure that
  1294. X+ the action should take place.  These confirmations include changing a
  1295. X+ folder when deletions have occurred, or deleting the text of a newly
  1296. X+ composed message instead of sending it.  Setting this resource to True
  1297. X+ eliminates those confirmation popups.
  1298. X+ .TP 3
  1299. X  \fB*iconic: \fI<boolean>\fR
  1300. X  This boolean defines whether the \*(xM application should be started in
  1301. X  iconic state or not.  It is highly recommended that only the application
  1302. X***************
  1303. X*** 353,359 ****
  1304. X  message entry windows to be started iconic, which could prove confusing
  1305. X  to the unaware user.
  1306. X  .TP 3
  1307. X! \fB*iconGeometry: \fI+XOff+YOff\fR
  1308. X  This resource defines an initial location for the icon, whenever the
  1309. X  \*(xM application is iconified.
  1310. X  .TP 3
  1311. X--- 387,393 ----
  1312. X  message entry windows to be started iconic, which could prove confusing
  1313. X  to the unaware user.
  1314. X  .TP 3
  1315. X! \fB*iconGeometry: \fI[+-]XOff[+-]YOff\fR
  1316. X  This resource defines an initial location for the icon, whenever the
  1317. X  \*(xM application is iconified.
  1318. X  .TP 3
  1319. X***************
  1320. X*** 383,392 ****
  1321. X  .TP 3
  1322. X  \fB*icon\fR
  1323. X  controls resources for the \fIicon\fR window.  In addition to 
  1324. X! specifications of foreground and background colors, it is possible
  1325. X! to also specify mailWatch widget resources, such as the following:
  1326. X  .RS
  1327. X  .TP 3
  1328. X  \fB*icon*reverseVideo: \fI<boolean>\fR
  1329. X  If set to true, reverses the foreground and background colors for the icon.
  1330. X  .TP 3
  1331. X--- 417,430 ----
  1332. X  .TP 3
  1333. X  \fB*icon\fR
  1334. X  controls resources for the \fIicon\fR window.  In addition to 
  1335. X! specifications of foreground and background colors, it is also possible
  1336. X! to specify the following mailWatch widget resources :
  1337. X  .RS
  1338. X  .TP 3
  1339. X+ \fB*icon*useName: \fI<Boolean>\fR
  1340. X+ If set to true, tells \*(xM to include the user login name in the icon window
  1341. X+ when displaying the icon.
  1342. X+ .TP 3
  1343. X  \fB*icon*reverseVideo: \fI<boolean>\fR
  1344. X  If set to true, reverses the foreground and background colors for the icon.
  1345. X  .TP 3
  1346. X***************
  1347. X*** 442,447 ****
  1348. X--- 480,556 ----
  1349. X  file \fB/usr/lib/X11/app-defaults/XMail\fR.  User's may wish to include
  1350. X  appropriate alternate definitions in their ~/.Xdefaults file, to tailor
  1351. X  preferences for colors and/or fonts.
  1352. X+ .SH "KEYBOARD ACCELERATORS"
  1353. X+ The index and text windows support two methods of scrolling displayable
  1354. X+ text.  The use of the mouse buttons in the scrollbar region is standard.
  1355. X+ In addition, keyboard keys have been defined in keeping with conventions
  1356. X+ used in text display programs such as \*Qmore\*U and \*Qless\*U.
  1357. X+ 
  1358. X+ The following table lists the key definitions and their respective actions.
  1359. X+ The abbreviation \*QCtrl\*U means to press down and hold the \fBControl\fR
  1360. X+ key while pressing the specified letter key.  \*QMeta\*U likewise refers
  1361. X+ to the \fBmeta\fR keys (\fIlabeled \*QLeft\*U and \*QRight\*U on some
  1362. X+ Sun keyboards\fR).
  1363. X+ .sp
  1364. X+ .RS
  1365. X+ .nf
  1366. X+ Key Name         Action Taken
  1367. X+ --------        -----------------------------
  1368. X+  Ctrl V         move to the next page
  1369. X+  space          move to the next page
  1370. X+  Meta V         move to the previous page
  1371. X+    b            move to the previous page
  1372. X+  Ctrl Z         scroll one line up
  1373. X+  Return         scroll one line up
  1374. X+    j            scroll one line up
  1375. X+  Meta Z         scroll one line down
  1376. X+    k            scroll one line down
  1377. X+    -            scroll one line down
  1378. X+    \'            move to the beginning of file
  1379. X+  Meta <         move to the beginning of file
  1380. X+  Meta >         move to the end of file
  1381. X+ Shift G         move to the end of file
  1382. X+ .fi
  1383. X+ .RE
  1384. X+ .sp
  1385. X+ .LP
  1386. X+ In addition to the scroll key definitions, the \fItext\fR window also supports
  1387. X+ keyboard accelerators for most of the command buttons.  Where possible,
  1388. X+ these keyboard keys replicate the actual commands that would be typed
  1389. X+ if the user were running the native mail program.  Thus, to begin
  1390. X+ sending a mail message to some recipient, the user could press the \*Qm\*U key,
  1391. X+ and to delete a current message, the user could press the \*Qd\*U key.
  1392. X+ .sp
  1393. X+ .RS
  1394. X+ .nf
  1395. X+ Key Name         Command Action Taken
  1396. X+ --------        -----------------------------
  1397. X+ Shift A         reply to all, include the current message
  1398. X+ Shift C         copy the message to the author's name
  1399. X+ Shift F         forward the current mail message
  1400. X+ Shift M         reply to a mail message
  1401. X+ Shift N         bring new mail into your system folder
  1402. X+ Shift P         send the current message to the printer
  1403. X+ Shift R         include the current message in a reply
  1404. X+ Shift S         save the message to the author's name
  1405. X+    a            reply to all recipients of a message
  1406. X+    c            copy the message to the indicated folder
  1407. X+    d            delete the current message
  1408. X+    f            read the full header of the message
  1409. X+    i            incorporate new mail without commit
  1410. X+    m            mail (compose) a new mail message
  1411. X+    n            read the next mail message
  1412. X+    p            read the previous mail message
  1413. X+    q            quit xmail, committing any changes
  1414. X+    r            read the current mail message
  1415. X+    s            save current message in specified folder
  1416. X+    u            undelete the most recently deleted message
  1417. X+    w            writes the message to the indicated file
  1418. X+    x            exit xmail, without committing changes
  1419. X+    ?            displays help for these key definitions
  1420. X+  <LF>           removes help for these key definitions
  1421. X+ .fi
  1422. X+ .RE
  1423. X  .SH "ENVIRONMENT"
  1424. X  Several process environment variables are of potential interest to \*(xM.
  1425. X  .sp
  1426. X***************
  1427. X*** 482,488 ****
  1428. X  path of the process (assumed to be at least \*Q/bin /usr/bin /usr/ucb\*U).
  1429. X  If need be, the XMAILER
  1430. X  environment variable can be used to provide a specific path to the Mail
  1431. X! program.  Note: \*(xM will not work correctly with any mail program
  1432. END_OF_FILE
  1433. if test 52848 -ne `wc -c <'Patch.02d'`; then
  1434.     echo shar: \"'Patch.02d'\" unpacked with wrong size!
  1435. fi
  1436. # end of 'Patch.02d'
  1437. fi
  1438. echo shar: End of archive 4 \(of 5\).
  1439. cp /dev/null ark4isdone
  1440. MISSING=""
  1441. for I in 1 2 3 4 5 ; do
  1442.     if test ! -f ark${I}isdone ; then
  1443.     MISSING="${MISSING} ${I}"
  1444.     fi
  1445. done
  1446. if test "${MISSING}" = "" ; then
  1447.     echo You have unpacked all 5 archives.
  1448.     rm -f ark[1-9]isdone
  1449. else
  1450.     echo You still need to unpack the following archives:
  1451.     echo "        " ${MISSING}
  1452. fi
  1453. ##  End of shell archive.
  1454. exit 0
  1455. dan
  1456. ----------------------------------------------------
  1457. O'Reilly && Associates   argv@sun.com / argv@ora.com
  1458. Opinions expressed reflect those of the author only.
  1459.